/**
 * @file upload_dataset.js
 * @author wxf
 * @date 2018/11/23
 */

var file_id;

var Utils = {
  /**
   * 伪文件选择框点击事件，触发真的文件选择框点击事件
   * @param {Object} that 文件选择框选择按钮对象
   */
  chooseFile: function (that) {
    $(that).parent().parent().children('input:first-child').click();
  },


  /**
   * 真文件选择框的change事件（此处将文件名显示到伪文件选择框）
   * @param {Object} that 真的文件选择框的 document 对象
   */
  afterChooseFile: function (that) {
    var viewInput = $(that).next('input');
    var name = that.files.length ? that.files[0].name : '';
    viewInput.val(name);
  },

  /**
   * 这里是yupeng自己新写 afterChooseFile 的，在真实框中内容改变之后就要检测是否相同并且上传，然后要返回id
   **/
  afterChooseFileUpload: function () {
    // var viewInput = $(that).next('input');
    // var name = that.files.length ? that.files[0].name : '';
    // viewInput.val(name);
      var that = $("#true-file");
    var files = $(that).prop('files');
    if (files.length) {
      uploadFile(files[0]);
    } else {
      $.notify({
        type: 'danger',
        message: gettext('Please select a file.')
      });
    }
  },

  /**
   * 判断当前输入框中的值是否与已有值重复（最多只能有两级），若重复会弹出错误通知
   * @param {Object} $input 所对应的输入框的 jQuery 对象
   * @param {boolean=false} group 是否为添加 group，默认为false
   * @returns {boolean} 能为 true，不能为 false
   */
  canAppend: function ($input, group) {
    if (!$input.val().trim()) {
      $.notify({type: 'danger', message: gettext('Option/Group name cannot be null or spaces.')});
      Utils.flashBadField($input, '.t-field');
      return false;
    }

    group = group || false;
    var $root, el;
    if (group) {
      $root = $input.parents('ul:first');
      el = '>li.group>b';    // group 只要同意层级分组名不同即可
    } else {
      $root = $input.parents('ul.t-field-content-extra:first');
      el = 'li.option';     // 选项需要全局都不同
    }

    var lis = $root.find(el);
    for (var i = 0; i < lis.length; i++) {
      if ($(lis[i]).text().trim() === $input.val().trim()) {
        $.notify({type: 'danger', message: gettext('Option/Group name duplicate')});
        Utils.flashBadField($input, '.t-field');
        return false;
      }
    }
    return true;
  }
  ,
  /**
   * 在输入框中输入值后按下 enter 键添加 option
   * @param {Object} e 键盘 key up 事件
   * @param {Object} that 对应输入框 document 对象
   */
  appendOptionByKeyUp: function (e, that) {
    var $input = $(that);
    if (e.which === 13 && Utils.canAppend($input)) {
      $input.parent().parent().before(TemplateFactory._CHOICE_LI({type: 'option', name: that.value.trim()}));
      $input.val('').focus();  // 可添加则清空输入并 focus
    }
  }
  ,
  /**
   * 点击添加选项按钮添加对应选项
   * @param {Object} that 对应输入框 document 对象
   */
  appendOptionByClick: function (that) {
    var $that = $(that);
    var $input = $that.prev().children('input:first-child');
    if (Utils.canAppend($input)) {
      $(that).parent().before(TemplateFactory._CHOICE_LI({type: 'option', name: $input.val()}));
      $input.val('').focus();  // 可添加则清空输入并 focus
    }
  }
  ,
  /**
   * 点击添加分组按钮添加对应分组
   * @param {Object} that 对应输入框 document 对象
   */
  appendGroup: function (that) {
    var $that = $(that);
    var $input = $that.prev().prev().children('input:first-child');
    if (Utils.canAppend($input, true)) {
      var $groupLi = $(TemplateFactory._CHOICE_LI({type: 'group', name: '<b>' + $input.val() + '</b>'}));
      $groupLi.append(TemplateFactory._CHOICE_SCOPE({addGroup: false}));
      $that.parent().before($groupLi);
      $input.val('').focus();  // 可添加则清空输入并 focus
    }
  },
};

$(function () {
  $("#submit").click(function () {
    if (!$.vf.validate()) {
      return;
    }
    var filein = $("#true-file");
    Utils.afterChooseFileUpload(filein);
  });
});

function uploadFile(file) {
  var submit_title = $("#title").val();
  var formData = new FormData();
  formData.append('file', file);
  formData.append('title',submit_title);
  $('body').preloader({
    text: gettext('Uploading...'),
    percent: '0'
});
  $.ajax({
    url: Urls.resolve('storage_api_v1:dataset_list'),
    data: formData,
    processData: false,
    contentType: false,
    type: 'POST',
    xhr: function () {
      var myXhr = $.ajaxSettings.xhr();
      if (myXhr.upload) {
        myXhr.upload.addEventListener('progress', function (e) {
          if (e.lengthComputable) {
            var complete = (e.loaded / e.total * 100 | 0);
            $('body').preloader('update', {
              percent: complete.toString(),
              text: gettext('Uploading...')
            });   // 更新loading进度
          }
        }, false);
      }
      return myXhr;
    },
      success: function () {
        alert(gettext('Upload Successfully！'));
        window.location.href=Urls.resolve('storage:my_template');
      },
      error: function () {
        alert(gettext('Sadly, an error occurred when send your request.💀'));
      }
  }).done(function (resp) { //前面的resp就是ajax回复的,这里是id
    file_id = resp.data.id;
    $("#true-file").data("file-id", file_id);
    $("#upload-success").css("display", "block");//上传成功之后显示一个对勾
  }).fail(function (data) {
    window._jqHandled = true;
  }).always(function () {
    $('body').preloader('remove');
  });
}
// function enableAction (action, t_ref_count) {
//   if (action === 'view') {
//     $('#save-template').attr('disabled', true);
//     $('#commit-template').attr('disabled', true);
//     $('#add-new-template').removeClass('hidden');
//     window._committed = true;
//     // autoSave(false);  // 查看模式不需要自动保存
//     $.showModal({
//       message: gettext('You have entered the viewing mode, you can enable editing or create a new template based on this template.')
//     });
//     $('body>div.alert').remove();
//     $.notify({
//       message: gettext('You have entered the viewing mode, you can enable editing or create a new template based on this template.'),
//       delay: 0
//     });
//   } else if (action === 'modify') {
//     if (t_ref_count > 0) {
//       $.showModal({
//         title: gettext('Warning'),
//         message: gettext('Already have data using your template, modify the operation will create a new template, the original template will not be deleted, are you sure you want to modify it?'),
//         onOk: function () {
//           enableAction('modify', 0);
//           window._enterModify = true;
//           window._saved = false;
//           window._oid = undefined;
//           tTitle.val(tTitle.val() + '-' + gettext('Copy'));
//           $('#btn-enable-modify').parents('.form-group:first').remove(); // 启用编辑后删除此 开关
//           setPublishState(false);
//         },
//         onHide: function () {
//           if (!window._enterModify) {
//             enableAction('view');
//           }
//         }
//       });
//     } else {
//       $('#save-template').attr('disabled', false);
//       $('#commit-template').attr('disabled', false);
//       $('#add-new-template').addClass('hidden');
//       window._committed = false;
//       // autoSave(true);
//       $('#btn-enable-modify').parent().remove(); // 启用编辑后删除此 开关
//     }
//     $('body>div.alert').remove();
//     if (t_ref_count === 0) {
//       $.notify({
//         message: gettext('You have entered the modifying mode, you can change controls or other attributes of this template, and then publish it.'),
//         delay: 0
//       });
//     } else {
//       $.notify({
//         message: gettext('Already have data using your template, modify the operation will create a new template, the original template will not be deleted, are you sure you want to modify it?'),
//         delay: 0
//       });
//     }
//   }
// }

  // var action = $('#t-action');
  //   $.get(Urls.resolve('storage_api_v1:dataset_detail', {pk: action.data('tid')})).done(function (resp) {
  //     var data = resp;
  //     $('body').preloader({
  //       text: gettext('Loading...')
  //     });
  //     if (data.published) {
  //       setPublishState(true);
  //     }
  //     window._oid = data.id;
  //     window._saved = true;
  //     window._t_ref_count = data.ref_count;
  //     setTimeout(function () {
  //       try {
  //         tTitle.val(data.title);
  //         tAbstract.val(data.abstract);
  //         tCategory.find('option[value=' + data.category + ']').attr('selected', true);
  //         data.content._ord.forEach(function (fName) {
  //           var field = data.content[fName];
  //           var fieldMaker = TemplateFactory[FieldTypeEnum._getNameByValue(field.t)];
  //           rootContainer.append(fieldMaker(fName, field.r, field.misc));
  //         });
  //         enableAction(action.val(), window._t_ref_count);
  //       } catch (err) {
  //         console.error(err);
  //       } finally {
  //         $('body').preloader('remove');
  //       }
  //     }, 1000);
  //   }).fail(function () {
  //     window._jqHandled = true;
  //   });